#include <iostream>

using namespace std;

struct Sales_data{
    //定义在类内部的函数都是隐式的inline函数
    string isbn() const{return bookNo;}
    Sales_data& combine(const Sales_data&);
    double ave_price()const; //注意const成员函数

    string bookNO;
    unsigned units_sold  = 0;
    double revenue = 0.0;

    //新增的构造函数
    Sales_data() = default;
    Sales_data(const string &s):bookNo(s){}
    friend ostream& operator<<(ostream& out,const Sales_data& rhs);
}
//Sales_data的非成员接口函数 ps:对于类而言他的非成员函数是接口函数
// 有点类似于golang当中的 interface
Sales_data add(const Sales_data& ,const Sales_data&);
ostream &print(std::ostream& , const Sales_data&);
istream &read(std::istream& , Sales_data&);

ostream& operator<<(ostream& out,const Sales_data& rhs){
    out << rhs.revenue << endl;

    return out;
}
void test(){
    Sales_data total;
    if(read(cin,total)){  //从键盘读入total数据
        Sales_data trans;

        while(read(cin,trans)){
            if(total.isbn() == trans.isbn()){ //如果两本书的isbn编号相同
                total.combine(trans); //合并
            }else{
                print(cout,total) << endl;
                total = trans;
            }
        }
        print(cout , total) << endl;
    }else{                              //没有任何输入信息
        cerr << "No data!>" << endl; //通知用户
    }
}
//在类的外面定于成员函数
double Sales_data::ave_price()const{
    if(this->units_sold){
        return revenue /units_sold;
    }else
        return 0;
}
//输入输出操作接口函数 同样也可以定义输入输出操作符重载 返回值都很类似
istream& read(istream& in,Sales_data& rhs){
    double price = 0;
    int >> rhs.bookNo >> item.unit_sold >> price;
    rhs.revenue = price * item.unit_sold;
    return is;
}
ostream& print(ostream& out, Sales_data& rhs){
    out << rhs.bookNo << " " << rhs.unit_sold << endl;

    return out;
}


//定义一个返回this对象的函数 
//调用情况 total.combine(trans)
Sales_data& Sales_data::combine(const Sales_data& rhs){
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}
int main(){


    return 0;
}